<?php

namespace qrscript;
//引入所需文件
use think\facade\Env;
use ZipArchive;

require_once('class/BCGFontFile.php');
require_once('class/BCGColor.php');
require_once('class/BCGDrawing.php');
require_once('class/BCGcode39.barcode.php');
require_once('class/BCGcode128.barcode.php');
require_once('qrcode/phpqrcode.php');



class qr
{
    public $students;
    public $path ;
    //文件生成的路径
    public function __construct($stdinfo)
    {
        $this->students = $stdinfo;
        $this->path = $_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.'uploads/barqrimg';
    }

    /**
     * 核销二维码
     * @return string
     */
    public function makeImg() {
        $std = $this->students;
            $infos = array_values($std);
            //黑白色
            $color_black = new \BCGColor(0, 0, 0);
            $color_white = new \BCGColor(255, 255, 255);
            //字体
            //$font = new \BCGFontFile(EXTEND_PATH.'/qrscript/font/Arial.ttf', 18);
            $drawException = null;
            $code = new \BCGcode128();
            if (! file_exists($this->path.'/qrcode/')) {
                mkdir($this->path.'/qrcode/',0777,true);
            }
            //二維碼
            /*
             * 第一个参数为二维码内容
             * 第二个参数为路径，没有就直接输出到浏览器
             * 第三个参数为容错率，默认为L，后面是M,Q,H,越高表示二维码能被覆盖区域的百分比
             * 第四个参数表示图片大小，默认为3
             * 第五个参数表示margin值，即二维码周围的白框大小
             * 最后一个表示是否保存到文件，默认为false*/
            $content =Env::get('url.surl')."/client/shop/reduce_qrcode?id=".$infos[1];
            dump($content);
            $filename = $this->path.'/qrcode/'.iconv("UTF-8","GBK",$infos[0]).'.png';

            \QRcode::png($content, $filename,QR_ECLEVEL_L,4,2,true);

            $path = DIRECTORY_SEPARATOR.'uploads/barqrimg'.'/qrcode/'.iconv("UTF-8","GBK",$infos[0]).'.png';
            return $path;

    }


    /**
     * 推广二维码
     * @param $logo
     * @return string
     */
    public function logo($id){
        //require_once(app_path()."/Tool/phpqrcode/phpqrcode.php");
        $value = $this->CreateTokenByRoomId($id);
        //$value = 'http://tea.jjwykj2018.com/index/room/control/id/'.$id.'/type/1';//二维码路径
        $errorCorrectionLevel = 'H';//容错级别
        $matrixPointSize = 8;//生成图片大小
        $logo = $_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.'logo.jpeg';
        //生成二维码图片
//        if (!file_exists($this->path.'/code/')) {
//            mkdir($this->path.'/code/',777,true);
//        }
        $filename = $this->path.'/code/'.iconv("UTF-8","GBK",time()).'.png';
        \QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
//        $logo = 'ceshi.png';//准备好的logo图片
        $QR = $filename;
        ;//已经生成的原始二维码图
        if ($logo !== FALSE) {
            $QR = imagecreatefromstring(file_get_contents($QR));
            $logo = imagecreatefromstring(file_get_contents($logo));

            if (imageistruecolor($logo)) {
                imagetruecolortopalette($logo, false, 65535);
            } //解决颜色失真的问题。

            $QR_width = imagesx($QR);//二维码图片宽度
            $QR_height = imagesy($QR);//二维码图片高度
            $logo_width = imagesx($logo);//logo图片宽度
            $logo_height = imagesy($logo);//logo图片高度
            $logo_qr_width = $QR_width / 4; //logo图片在二维码图片中宽度大小
            $scale = $logo_width/$logo_qr_width;
            $logo_qr_height = $logo_height/$scale; //logo图片在二维码图片中高度大小
            $from_width = ($QR_width - $logo_qr_width) / 2;
            //重新组合图片并调整大小
            imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
        }
        //\QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
         $filename = $this->path.'/code/'.iconv("UTF-8","GBK",time()).'.png';
         imagepng($QR,$filename);// 保存最终生成的二维码到本地

        $path = DIRECTORY_SEPARATOR.'uploads/barqrimg'.'/code/'.iconv("UTF-8","GBK",time().'.png');
        return $path;//输出路径

    }

    /**
     * 创建token
     * @param int $user_id
     * @return string
     */
    public function CreateTokenByRoomId(int $room_id) {
        $token = [
            'room_id'=>$room_id,
            'until'=>time()+7*86400,
            'rand'=>rand(100,999)
        ];
        return static::EncryptToken(json_encode($token,JSON_UNESCAPED_UNICODE));
    }

    /**
     * 加密token
     * @param string $tokens
     * @return string
     */
    public static function EncryptToken(string $token) {
        return base64_encode($token);
    }
    


}
